package org.stvd.service.admin;

import java.util.List;
import java.util.Map;

import org.stvd.core.dto.QueryResult;
import org.stvd.entities.admin.Department;
import org.stvd.service.base.BaseService;

/**
 * @Title: DepartmentService
 * @Description: 系统机构业务层接口类
 * @author houzx
 * @date 2020年8月8日
 */
public interface DepartmentService extends BaseService<Department> {

    /**
     * 根据平台GUID获取用户机构列表
     * @param guid 平台ID
     * @return
     */
    List<Map<String, Object>> listUserDepByGuid(String guid);
    /**
     * 根据平台GUID获取机构列表
     * @param guid 平台ID
     * @return
     */
    List<Department> findAllDepByGuid(String guid);
    
    /**
     * 获取带格式的所有机构列表
     * @param guid 平台ID
     * @return
     */
    List<Department> getFormatAllDepByGuid(String guid);
    
    /**
     * 获取带格式的所有子机构列表
     * @param depId 机构ID
     * @param guid 平台ID
     * @return
     */
    List<Department> getFormatChildDepartment(String depId, String guid);
    
    /**
     * @Description: 获取机构子列表
     * @param depId 机构ID
     * @param guid 平台ID
     * @return
     */
    List<Department> getChildDepartment(String depId, String guid);

    /**
     * @Description: 获取机构所有子列表
     * @param depId 机构ID
     * @param guid 平台ID
     * @return
     */
    List<Department> getAllChildDepartment(String depId, String guid);
    
    /**
     * @Description: 通过JSM和GUID查询机构列表
     * @param jsm 拼音码
     * @param guid 平台ID
     * @return
     */
    List<Department> findImeDepartmentByJsm(String jsm, String guid);

    /**
     * @Description: 通过用户ID和GUID查询机构列表
     * @param userId 用户ID
     * @param guid 平台ID
     * @return
     */
    List<Department> findDepByUid(String userId, String guid);
    
    /**
     * @Description: 获取上级机构ID列表
     * @param department
     * @return
     */
    List<String> getParentDepids(Department department);

    /**
     * @Description: 通过内部编码获取机构列表
     * @param innerCode 内部编码
     * @param guid 平台ID
     * @return
     */
    List<Department> findDepartmentByInnerCode(String innerCode, String guid);
    /**
     * 根据机构编码获取机构信息
     * @param depCode 机构编码
     * @param guid 平台ID
     * @return
     */
    Department getDepartmentByDepCode(String depCode, String guid);

    /**
     * @Description: 通过条件查询机构集合
     * @param start
     * @param limit
     * @param depName 机构名称
     * @param guid 平台ID
     * @return
     */
    QueryResult<Department> getDepartmentQueryResult(int start, int limit, String depName, String guid);
    /**
     * 在含有对应机构的平台插入机构信息
     * @param userId 用户ID
     * @param depCode 机构编码
     */
    void insertUserDep(String userId, String depCode);

    /**
     * 根据条件插入用户机构映射信息
     * @param userId 用户ID
     * @param depId 机构ID
     * @param guid GUID
     */
    void insertUserDep(String userId, String depId, String guid);
    
    /**
     * 根据条件插入用户机构映射信息
     * @param userId 用户ID
     * @param depCode 机构编码
     * @param guid GUID
     */
    void insertUserDepMap(String userId, String depCode, String guid);
    
    /**
     * 根据条件删除用户机构映射信息
     * @param userId 用户ID
     * @param depId 机构编码
     * @param guid GUID
     */
    void deleteUserDepMap(String userId, String depCode, String guid);
    
    /**
     * @Description: 删除机构信息
     * @param depId 机构ID
     * @param guid 平台ID
     * @throws Exception
     */
    void deleteDepartment(String depId, String guid) throws Exception;

    /**
     * @Description: 判断是否是字机构
     * @param depId 机构ID
     * @param childDepId 子机构ID
     * @param guid 平台ID
     * @return
     */
    boolean isChildDepartment(String depId, String childDepId, String guid);
}
